/*
 * Copyright (C) 2024, KylinSoft Co., Ltd.
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <https://www.gnu.org/licenses/>.
 *
 * Authors: zy-yuan1 <zhangyuanyuan1@kylinos.cn>
 *
 */
#ifndef NEETSPEED_H
#define NEETSPEED_H

#include <QObject>
#include <QTimer>
#include <QString>

class Neetspeed : public QObject
{
    Q_OBJECT
    Q_PROPERTY(QString rxRate READ rxRate NOTIFY netspeedUpdated)
    Q_PROPERTY(QString txRate READ txRate NOTIFY netspeedUpdated)
public:
    static Neetspeed *instance();

    explicit Neetspeed(QObject *parent = nullptr);
    ~Neetspeed();
    void startShowNetspeed();
    void stopShowNetspeed();
    QString rxRate(); //down
    QString txRate(); //up

private:
    QString m_deviceName;
    QString m_strRxRate = "0 KB/s";
    QString m_strTxRate = "0 KB/s";
    QTimer *m_showNetspeedtimer = nullptr;
    long int m_startRxRate = 0;
    long int m_endRxRate = 0;
    long int m_startTxRate = 0;
    long int m_endTxRate = 0;

    void getNetworkDeviceInterface();
    int getCurrentLoadRate(QString dev, long *rxRate, long *txRate);
    void calculateNetspeed(QString dev, QString &strRx, QString &strTx);
    QString findNetworkDeviceByUni(const QString uni);

private Q_SLOTS:
    void onPrimaryConnectionChanged(const QString &uni);

Q_SIGNALS:
    void netspeedUpdated();

};

#endif // NEETSPEED_H
